{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "475fd0ba-5bea-4cc1-98fb-e7eb694054b8",
   "metadata": {},
   "source": [
    "### 导入依赖库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "1c8d64e9-42f3-4935-8ac5-20b1cc03c9a8",
   "metadata": {},
   "outputs": [],
   "source": [
    "from langchain_community.chat_models import ChatZhipuAI\n",
    "from langchain_text_splitters import RecursiveCharacterTextSplitter\n",
    "from langchain_community.embeddings import ZhipuAIEmbeddings\n",
    "from langchain_core.vectorstores import InMemoryVectorStore\n",
    "from langchain_core.documents import Document\n",
    "from langchain.chains import create_retrieval_chain\n",
    "from langchain.chains.combine_documents import create_stuff_documents_chain\n",
    "from langchain_core.prompts import ChatPromptTemplate"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1aa3a008-826d-4534-95c6-24c4386f0ade",
   "metadata": {},
   "source": [
    "### 配置API密钥"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "427e6c0c-7926-4656-8f5c-812eec482bd8",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "os.environ[\"ZHIPUAI_API_KEY\"] = \"你的api key\""
   ]
  },
  {
   "cell_type": "markdown",
   "id": "abfa6a97-28f1-4ba3-8d87-39b05c5530fb",
   "metadata": {},
   "source": [
    "### 初始化GLM-4-Flash模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "6fd5de7c-61d9-4eda-bb36-92669861236e",
   "metadata": {},
   "outputs": [],
   "source": [
    "chat = ChatZhipuAI(\n",
    "    model=\"glm-4-flash\",\n",
    "    temperature=0.5,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f6159699-17a8-4178-86b1-04832f5bfe0d",
   "metadata": {},
   "source": [
    "### 文档加载"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "f91b43b4-4b63-4788-a7c4-15d2c560d454",
   "metadata": {},
   "outputs": [],
   "source": [
    "from langchain_community.document_loaders import (\n",
    "    WebBaseLoader, \n",
    "    PyPDFLoader,\n",
    "    TextLoader\n",
    ")\n",
    "\n",
    "# 网页文档加载\n",
    "# web_loader = WebBaseLoader([\"https://baike.baidu.com/item/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/9180\"])\n",
    "# web_docs = web_loader.load()\n",
    "\n",
    "# PDF文档加载\n",
    "pdf_loader = PyPDFLoader(\"DL.pdf\")\n",
    "pdf_docs = pdf_loader.load()\n",
    "\n",
    "# 文本文件加载\n",
    "text_loader = TextLoader(\"ML.txt\",encoding=\"utf-8\")\n",
    "text_docs = text_loader.load()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "24f84f7c-8a79-4dad-a498-606f1e76b883",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[Document(metadata={'producer': 'Skia/PDF m131', 'creator': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/131.0.0.0 Safari/537.36', 'creationdate': '2025-04-05T06:48:32+00:00', 'moddate': '2025-04-05T06:48:32+00:00', 'title': 'Untitled1', 'source': 'DL.pdf', 'total_pages': 1, 'page': 0, 'page_label': '1'}, page_content='深度学习（ Deep Learning ）是机器学习的一个子领域，它利用多层次的神经网络模型和方法来处理数据。这些深层次的结构能够自动从大量数据中学习特征，从而实现对复杂模式的理解和预测。\\n深度学习的基本概念\\n深度学习的核心在于其模仿人脑神经元之间相互连接的方式构建的多层神经网络。每个神经元接收输入信号，并通过一系列权重加权后进行处理，最终输出到下一层。这一过程允许神经网络通过学习数据中的特征和模式来进行分类、回归等任务。\\n深度学习之所以强大，在于它可以自动提取特征，而不需要像传统机器学习那样依赖手工设计的特征。这意味着对于图像识别、语音识别、自然语言处理等复杂任务，深度学习可以通过训练深层神经网络直接从原始数据中学习出有用的表示形式。\\n神经网络结构\\n典型的神经网络由三层组成：输入层、隐藏层和输出层。输入层负责接收外部输入数据；隐藏层则对输入数据进行处理，提取特征；输出层输出结果或预测。在深度神经网络中，隐藏层的数量可以达到多个甚至十几个以上，这使得网络能够逐层提取更加复杂的特征。\\n前馈神经网络（ Feedforward Neural Network, FNN ）是最简单的神经网络模型，通常用于基础的回归和分类任务。\\n卷积神经网络（ Convolutional Neural Network, CNN ）主要用于处理图像数据，通过卷积操作自动提取图像特征，广泛应用于计算机视觉领域。\\n循环神经网络（ Recurrent Neural Network, RNN ）适用于序列数据分析，如文本和语音识别，其特点是具有记忆能力，可以捕捉时间序列数据中的依赖关系。\\n自编码器是一种无监督学习方法，通过对输入数据进行压缩和解压缩，构建一个可以学习输入数据分布的低维空间表示。\\n训练过程\\n神经网络的训练通常采用反向传播算法（ Backpropagation ），该算法通过链式法则计算损失函数对每个参数（权重和偏置）的梯度，并使用优化算法（如梯度下降）更新网络参数，以减小误差。\\n在训练过程中，选择合适的激活函数也非常重要。例如 ReLU （ Rectiﬁed Linear Unit ）作为最常见的激活函数之一，能够有效解决梯度消失问题。此外，还需要注意学习率的选择以及批次大小的影响，它们都会影响模型的收敛速度和稳定性。\\n应用领域\\n由于其强大的特征学习能力和对非线性关系的建模能力，深度学习在多个领域展现出了巨大的潜力和应用前景：\\n计算机视觉：包括图像分类、目标检测、面部识别等。\\n自然语言处理：涵盖机器翻译、文本生成、情感分析等领域。\\n语音识别与合成：实现了语音转文字、语音合成等功能。\\n医疗健康：疾病预测、医学影像分析、药物发现等都是深度学习的重要应用场景。\\n自动驾驶：通过感知环境、决策和控制车辆，实现安全的自动驾驶。\\n发展趋势与挑战\\n尽管深度学习取得了显著成就，但它仍然面临着一些挑战，比如需要大量的标注数据、高昂的计算成本、模型解释性的缺乏以及泛化能力的问题。未来的研究方向可能包括自监督学习、小样本学习、能效优化以及推动通用人工智能的发展。\\n综上所述，深度学习作为一种模拟人类大脑工作原理的技术手段，已经在众多领域展现了它的价值，并且随着技术的进步，预计将在更多领域发挥更大的作用。不过，要充分发挥其潜力，仍需克服一系列技术和理论上的障碍。\\n \\nIn [ ]:')]\n",
      "[Document(metadata={'source': 'ML.txt'}, page_content='机器学习（Machine Learning, ML）是人工智能的一个分支，它使计算机系统能够利用经验自动改进性能。简单来说，机器学习涉及到编写算法，让机器通过分析数据学习如何执行任务，而不是直接编程告诉它如何完成7。\\n\\n定义与目标\\n机器学习是一种通过算法和模型使计算机从数据中自动学习并进行预测或决策的技术，属于人工智能的一个分支。其核心目标是让计算机在没有明确编程指令的情况下，通过对大量数据的分析，识别模式和规律，从而构建适应新数据的模型。机器学习包括监督学习、无监督学习和强化学习等不同类型，广泛应用于图像识别、自然语言处理、推荐系统和自动驾驶等领域，具备自适应、自动化和泛化能力，是数据驱动的技术创新8。\\n\\n核心概念\\n数据与模型\\n数据：机器学习的基础是数据，包括结构化和非结构化数据。数据构成样本（Sample），每个样本由特征（Feature）和可选的标签（Label）组成。例如，在房价预测中，房屋面积、房龄是特征，房价是标签。\\n模型：模型是数学函数，将输入数据映射到预测输出\\n主要类型\\n监督学习：使用标记过的数据集来训练模型，如线性回归、逻辑回归、支持向量机（SVM）等，主要用于分类和回归问题5。\\n无监督学习：处理未标记的数据，寻找数据中的结构和模式，如K均值聚类、主成分分析等，用于探索数据中的模式和结构5。\\n强化学习：通过与环境的交互来学习达到目标的最优策略。智能体的目标是通过最大化长期奖励来优化行为。例如：AlphaGo、自动驾驶汽车等都是强化学习的例子6。\\n过拟合与欠拟合\\n过拟合：模型在训练数据上表现极佳（训练误差低），但在新数据（测试集或真实场景）上的表现很差，通常是因为模型过于复杂，捕捉了训练数据中的噪声或偶然性。\\n欠拟合：模型在训练数据上和测试数据上都表现不佳，通常是因为模型过于简单，无法捕捉数据中的复杂模式2。\\n常见算法\\n监督学习算法：包括线性回归、决策树、随机森林、支持向量机（SVM）、神经网络等。\\n无监督学习算法：包括K-Means聚类、主成分分析（PCA）、自编码器等。\\n强化学习算法：包括Q-Learning、深度强化学习（DQN、PPO）等。\\n应用领域\\n机器学习已经渗透到各个行业，下面列举了一些典型的应用：\\n\\n计算机视觉：如图像分类（ResNet、VGG）、目标检测（YOLO、Faster R-CNN）、人脸识别（OpenCV、FaceNet）等。\\n自然语言处理（NLP）：文本分类（BERT、GPT）、机器翻译（Transformer）、情感分析（LSTM）等。\\n语音识别：语音转文字（ASR）（DeepSpeech、Whisper）、语音合成（TTS）（Tacotron）等。\\n金融与商业分析：信用评分（逻辑回归）、股票价格预测（时间序列分析）、欺诈检测（随机森林、XGBoost）等11。\\n发展趋势\\n随着技术的发展，机器学习也在不断进化。一些未来的发展趋势包括：\\n\\n自动机器学习（AutoML）：减少手动调参，提高开发效率。\\n联邦学习（Federated Learning）：提升数据隐私保护。\\n强化学习在自动化决策中的应用11。\\n结语\\n机器学习正在推动AI变革，并广泛应用于各个领域。未来，随着算法优化和计算能力提升，机器学习将进一步深入到智能化系统中，为社会带来更多可能性。无论是新手入门还是高手进阶，掌握这些技术不仅是提升自身竞争力的必要手段，更是为各行业注入创新动力的重要途径15。通过不断地学习和实践，我们可以期待机器学习为我们的生活和工作带来更多的惊喜与改变。')]\n"
     ]
    }
   ],
   "source": [
    "print(pdf_docs)\n",
    "print(text_docs)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "36f1fbf8-caf1-49ed-a46b-1fee58b80db0",
   "metadata": {},
   "source": [
    "### 文档分割"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "2dab99ce-820f-4400-b351-79df947b75cd",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 针对中文优化的分割器\n",
    "text_splitter = RecursiveCharacterTextSplitter(\n",
    "    chunk_size=500,          # 块大小（字符数）\n",
    "    chunk_overlap=50,        # 块间重叠\n",
    "    separators=[\"\\n\\n\", \"。\", \"！\", \"？\", \"；\"],  # 中文分句符号\n",
    "    length_function=len      # 使用字符数统计\n",
    ")\n",
    "\n",
    "chunks = text_splitter.split_documents(pdf_docs + text_docs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "f2bee93a-f2fe-47b9-b35b-b19d7b678f66",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Document(metadata={'producer': 'Skia/PDF m131', 'creator': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/131.0.0.0 Safari/537.36', 'creationdate': '2025-04-05T06:48:32+00:00', 'moddate': '2025-04-05T06:48:32+00:00', 'title': 'Untitled1', 'source': 'DL.pdf', 'total_pages': 1, 'page': 0, 'page_label': '1'}, page_content='深度学习（ Deep Learning ）是机器学习的一个子领域，它利用多层次的神经网络模型和方法来处理数据。这些深层次的结构能够自动从大量数据中学习特征，从而实现对复杂模式的理解和预测。\\n深度学习的基本概念\\n深度学习的核心在于其模仿人脑神经元之间相互连接的方式构建的多层神经网络。每个神经元接收输入信号，并通过一系列权重加权后进行处理，最终输出到下一层。这一过程允许神经网络通过学习数据中的特征和模式来进行分类、回归等任务。\\n深度学习之所以强大，在于它可以自动提取特征，而不需要像传统机器学习那样依赖手工设计的特征。这意味着对于图像识别、语音识别、自然语言处理等复杂任务，深度学习可以通过训练深层神经网络直接从原始数据中学习出有用的表示形式。\\n神经网络结构\\n典型的神经网络由三层组成：输入层、隐藏层和输出层。输入层负责接收外部输入数据；隐藏层则对输入数据进行处理，提取特征；输出层输出结果或预测。在深度神经网络中，隐藏层的数量可以达到多个甚至十几个以上，这使得网络能够逐层提取更加复杂的特征'),\n",
       " Document(metadata={'producer': 'Skia/PDF m131', 'creator': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/131.0.0.0 Safari/537.36', 'creationdate': '2025-04-05T06:48:32+00:00', 'moddate': '2025-04-05T06:48:32+00:00', 'title': 'Untitled1', 'source': 'DL.pdf', 'total_pages': 1, 'page': 0, 'page_label': '1'}, page_content='。在深度神经网络中，隐藏层的数量可以达到多个甚至十几个以上，这使得网络能够逐层提取更加复杂的特征。\\n前馈神经网络（ Feedforward Neural Network, FNN ）是最简单的神经网络模型，通常用于基础的回归和分类任务。\\n卷积神经网络（ Convolutional Neural Network, CNN ）主要用于处理图像数据，通过卷积操作自动提取图像特征，广泛应用于计算机视觉领域。\\n循环神经网络（ Recurrent Neural Network, RNN ）适用于序列数据分析，如文本和语音识别，其特点是具有记忆能力，可以捕捉时间序列数据中的依赖关系。\\n自编码器是一种无监督学习方法，通过对输入数据进行压缩和解压缩，构建一个可以学习输入数据分布的低维空间表示。\\n训练过程\\n神经网络的训练通常采用反向传播算法（ Backpropagation ），该算法通过链式法则计算损失函数对每个参数（权重和偏置）的梯度，并使用优化算法（如梯度下降）更新网络参数，以减小误差。\\n在训练过程中，选择合适的激活函数也非常重要'),\n",
       " Document(metadata={'producer': 'Skia/PDF m131', 'creator': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/131.0.0.0 Safari/537.36', 'creationdate': '2025-04-05T06:48:32+00:00', 'moddate': '2025-04-05T06:48:32+00:00', 'title': 'Untitled1', 'source': 'DL.pdf', 'total_pages': 1, 'page': 0, 'page_label': '1'}, page_content='。\\n在训练过程中，选择合适的激活函数也非常重要。例如 ReLU （ Rectiﬁed Linear Unit ）作为最常见的激活函数之一，能够有效解决梯度消失问题。此外，还需要注意学习率的选择以及批次大小的影响，它们都会影响模型的收敛速度和稳定性。\\n应用领域\\n由于其强大的特征学习能力和对非线性关系的建模能力，深度学习在多个领域展现出了巨大的潜力和应用前景：\\n计算机视觉：包括图像分类、目标检测、面部识别等。\\n自然语言处理：涵盖机器翻译、文本生成、情感分析等领域。\\n语音识别与合成：实现了语音转文字、语音合成等功能。\\n医疗健康：疾病预测、医学影像分析、药物发现等都是深度学习的重要应用场景。\\n自动驾驶：通过感知环境、决策和控制车辆，实现安全的自动驾驶。\\n发展趋势与挑战\\n尽管深度学习取得了显著成就，但它仍然面临着一些挑战，比如需要大量的标注数据、高昂的计算成本、模型解释性的缺乏以及泛化能力的问题。未来的研究方向可能包括自监督学习、小样本学习、能效优化以及推动通用人工智能的发展'),\n",
       " Document(metadata={'producer': 'Skia/PDF m131', 'creator': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/131.0.0.0 Safari/537.36', 'creationdate': '2025-04-05T06:48:32+00:00', 'moddate': '2025-04-05T06:48:32+00:00', 'title': 'Untitled1', 'source': 'DL.pdf', 'total_pages': 1, 'page': 0, 'page_label': '1'}, page_content='。未来的研究方向可能包括自监督学习、小样本学习、能效优化以及推动通用人工智能的发展。\\n综上所述，深度学习作为一种模拟人类大脑工作原理的技术手段，已经在众多领域展现了它的价值，并且随着技术的进步，预计将在更多领域发挥更大的作用。不过，要充分发挥其潜力，仍需克服一系列技术和理论上的障碍。\\n \\nIn [ ]:'),\n",
       " Document(metadata={'source': 'ML.txt'}, page_content='机器学习（Machine Learning, ML）是人工智能的一个分支，它使计算机系统能够利用经验自动改进性能。简单来说，机器学习涉及到编写算法，让机器通过分析数据学习如何执行任务，而不是直接编程告诉它如何完成7。\\n\\n定义与目标\\n机器学习是一种通过算法和模型使计算机从数据中自动学习并进行预测或决策的技术，属于人工智能的一个分支。其核心目标是让计算机在没有明确编程指令的情况下，通过对大量数据的分析，识别模式和规律，从而构建适应新数据的模型。机器学习包括监督学习、无监督学习和强化学习等不同类型，广泛应用于图像识别、自然语言处理、推荐系统和自动驾驶等领域，具备自适应、自动化和泛化能力，是数据驱动的技术创新8。'),\n",
       " Document(metadata={'source': 'ML.txt'}, page_content='核心概念\\n数据与模型\\n数据：机器学习的基础是数据，包括结构化和非结构化数据。数据构成样本（Sample），每个样本由特征（Feature）和可选的标签（Label）组成。例如，在房价预测中，房屋面积、房龄是特征，房价是标签。\\n模型：模型是数学函数，将输入数据映射到预测输出\\n主要类型\\n监督学习：使用标记过的数据集来训练模型，如线性回归、逻辑回归、支持向量机（SVM）等，主要用于分类和回归问题5。\\n无监督学习：处理未标记的数据，寻找数据中的结构和模式，如K均值聚类、主成分分析等，用于探索数据中的模式和结构5。\\n强化学习：通过与环境的交互来学习达到目标的最优策略。智能体的目标是通过最大化长期奖励来优化行为。例如：AlphaGo、自动驾驶汽车等都是强化学习的例子6。\\n过拟合与欠拟合\\n过拟合：模型在训练数据上表现极佳（训练误差低），但在新数据（测试集或真实场景）上的表现很差，通常是因为模型过于复杂，捕捉了训练数据中的噪声或偶然性。\\n欠拟合：模型在训练数据上和测试数据上都表现不佳，通常是因为模型过于简单，无法捕捉数据中的复杂模式2'),\n",
       " Document(metadata={'source': 'ML.txt'}, page_content='。\\n常见算法\\n监督学习算法：包括线性回归、决策树、随机森林、支持向量机（SVM）、神经网络等。\\n无监督学习算法：包括K-Means聚类、主成分分析（PCA）、自编码器等。\\n强化学习算法：包括Q-Learning、深度强化学习（DQN、PPO）等。\\n应用领域\\n机器学习已经渗透到各个行业，下面列举了一些典型的应用：'),\n",
       " Document(metadata={'source': 'ML.txt'}, page_content='计算机视觉：如图像分类（ResNet、VGG）、目标检测（YOLO、Faster R-CNN）、人脸识别（OpenCV、FaceNet）等。\\n自然语言处理（NLP）：文本分类（BERT、GPT）、机器翻译（Transformer）、情感分析（LSTM）等。\\n语音识别：语音转文字（ASR）（DeepSpeech、Whisper）、语音合成（TTS）（Tacotron）等。\\n金融与商业分析：信用评分（逻辑回归）、股票价格预测（时间序列分析）、欺诈检测（随机森林、XGBoost）等11。\\n发展趋势\\n随着技术的发展，机器学习也在不断进化。一些未来的发展趋势包括：'),\n",
       " Document(metadata={'source': 'ML.txt'}, page_content='自动机器学习（AutoML）：减少手动调参，提高开发效率。\\n联邦学习（Federated Learning）：提升数据隐私保护。\\n强化学习在自动化决策中的应用11。\\n结语\\n机器学习正在推动AI变革，并广泛应用于各个领域。未来，随着算法优化和计算能力提升，机器学习将进一步深入到智能化系统中，为社会带来更多可能性。无论是新手入门还是高手进阶，掌握这些技术不仅是提升自身竞争力的必要手段，更是为各行业注入创新动力的重要途径15。通过不断地学习和实践，我们可以期待机器学习为我们的生活和工作带来更多的惊喜与改变。')]"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "chunks"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ec0426bc-ba48-483d-9485-164762170249",
   "metadata": {},
   "source": [
    "### 向量化模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "bf133016-6be8-496e-988b-df48c44af1ac",
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "# 指定向量化模型，\n",
    "embeddings = ZhipuAIEmbeddings(\n",
    "    model=\"embedding-2\",\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d7e709ad-0482-4f12-a2b5-57191bafe8a0",
   "metadata": {},
   "source": [
    "### 向量存储"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "6da60330-2da7-4c80-8bd7-7970b5b4763b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['875d105b-7f4c-4c38-8bb5-ecf4baed39ba',\n",
       " 'bb07aa36-1ece-47a3-a15c-73b66d6f612a',\n",
       " '64b32396-ccc0-4138-88cd-303a1817f82e',\n",
       " '1d89f41e-baea-42b8-9980-dfe439e4f241',\n",
       " '894ae498-d1c9-4bd1-ae1d-78a8bc0e0375',\n",
       " 'b9a7f149-3b20-4131-ba31-f10a97368e3f',\n",
       " '3e697101-a32f-4121-b2f6-150cdf562212',\n",
       " '423d0188-bbb6-4563-afa2-13ae522b46b1',\n",
       " '74041c28-b77d-402e-aa15-b18baa7ceaaa']"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 初始化向量模型\n",
    "vector_store = InMemoryVectorStore(embedding=embeddings)\n",
    "# 向量存储\n",
    "vector_store.add_documents(documents=chunks)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "d5f22ddf-fc23-4c54-a461-8c3c030251ba",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<langchain_core.vectorstores.in_memory.InMemoryVectorStore at 0x182f6422b70>"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "vector_store"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "321a92a3-54d5-433d-95c0-f82ad60286f2",
   "metadata": {},
   "source": [
    "### 基础检索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "4de2e56c-7cee-4499-903a-cd249376e39e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "机器学习（ML）与深度学习（DL）之间的区别与联系如下：\n",
      "\n",
      "**区别：**\n",
      "\n",
      "1. **定义和范围：**\n",
      "   - 机器学习是一个更广泛的概念，指的是让计算机通过数据和算法自动学习和改进性能的技术。\n",
      "   - 深度学习是机器学习的一个子领域，它特别关注使用多层神经网络来处理和表示数据。\n",
      "\n",
      "2. **模型复杂度：**\n",
      "   - 机器学习可以使用各种类型的模型，包括简单的线性模型、决策树、支持向量机等。\n",
      "   - 深度学习通常使用更复杂的模型，如卷积神经网络（CNN）、循环神经网络（RNN）和生成对抗网络（GAN）等。\n",
      "\n",
      "3. **特征提取：**\n",
      "   - 传统的机器学习模型通常需要手动设计特征，而深度学习可以自动从原始数据中提取特征。\n",
      "\n",
      "4. **数据需求：**\n",
      "   - 机器学习模型可能需要大量数据，但不需要像深度学习那样大量的数据来训练。\n",
      "\n",
      "5. **计算资源：**\n",
      "   - 深度学习模型通常需要更多的计算资源，尤其是GPU，因为它们需要大量的并行计算来训练。\n",
      "\n",
      "**联系：**\n",
      "\n",
      "1. **技术关系：**\n",
      "   - 深度学习是机器学习的一个子集，因此深度学习模型是机器学习模型的一种。\n",
      "\n",
      "2. **应用领域：**\n",
      "   - 深度学习在图像识别、语音识别、自然语言处理等领域取得了显著成果，这些领域也是机器学习的主要应用领域。\n",
      "\n",
      "3. **目标：**\n",
      "   - 两者都旨在使计算机能够从数据中学习，并自动改进性能。\n",
      "\n",
      "4. **发展历程：**\n",
      "   - 深度学习是机器学习发展的一个重要阶段，它在某些领域取得了突破性的进展。\n",
      "\n",
      "总结来说，深度学习是机器学习的一种特定实现方式，它通过使用复杂的神经网络模型来提高机器学习在特定任务上的性能。尽管它们之间存在区别，但深度学习与机器学习在目标和应用上有着紧密的联系。\n"
     ]
    }
   ],
   "source": [
    "# 定义提示模板\n",
    "template = \"\"\"\n",
    "基于以下上下文回答问题：\n",
    "{context}\n",
    "\n",
    "问题：{input}\n",
    "\"\"\"\n",
    "\n",
    "prompt = ChatPromptTemplate.from_template(template)\n",
    "\n",
    "# 构建文档处理链\n",
    "document_chain = create_stuff_documents_chain(chat, prompt)\n",
    "\n",
    "# 构建完整RAG链\n",
    "retriever = vector_store.as_retriever(search_kwargs={\"k\": 3})  # 返回前3相关结果\n",
    "rag_chain = create_retrieval_chain(retriever, document_chain)\n",
    "\n",
    "# 执行查询\n",
    "response = rag_chain.invoke({\"input\": \"ML与DL的区别与联系\"})\n",
    "print(response[\"answer\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "08073017-285c-408c-89ed-5d94133d63ee",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
